package com.vvv.designpattern.structuredpattern;

/**
 * @author vvv
 * @date 2023-11-13 18 47
 * discription Cglib动态代理
 */
public class CglibProxy {
    public static void main(String[] args) {
        /**
         * 1. 静态代理和JDK代理模式都要求目标对象是实现一个接口
         *  ,但是有时候目标对象只是一个单独的对象,并没有实现任何的接口,这个时候可使用目标对象子类来实现代理-这就是Cglib代理
         *
         * 2. Cglib 无需通过接口来实现，它是通过实现子类的方式来完成调用的
         *
         * 3. Cglib是一个强大的高性能的代码生成包,它可以在运行期扩展java类与实现java接口.它广泛的被许多AOP的框架使用,例如Spring AOP，实现方法拦截
         */

    }
}
/*public class ProxyFactory implements MethodInterceptor {

    private Object target;

    public ProxyFactory(Object target) {
        this.target = target;
    }

    public Object getInstance(){

        // 第一步：创建工具类
        Enhancer enhancer=new Enhancer();
        // 第二步：设置父类
        enhancer.setSuperclass(target.getClass());
        // 第三步：设置回调函数
        enhancer.setCallback(this);
        // 第四步：创建子类对象,即代理对象
        return enhancer.create();
    }

    @Override
    public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {

        System.out.println("cglib代理开始");
        Object invoke = method.invoke(target, objects);
        System.out.println("cglib代理结束");

        return invoke;
    }
}*/


